#include <stdio.h>
/*
栈数据结构
    说明：
        1. 栈顶 top 始终指向栈顶的下一个位置, 例如站内有 1,栈顶指向1的后方       
            |       |
            |       |   <----- top
            +-------+
            |   1   |   
            +-------+   栈底
        2. 使用一个栈主要有以下五个操作
            1. 创建栈
            2. 元素进栈
            3. 元素出栈
            4. 获取栈顶元素（并没有出栈操作）
            5. 销毁栈
        3. 上述五个过程中，应当先创建栈之后，再进行2~4的操作，同时在程序结束后应当记得销毁栈
*/

/* 栈内的数据类型 */
typedef char DYMStackDataType;

struct _stack
{
    int top;                    /* 栈顶指针 */
    DYMStackDataType* buffer;   /* 栈中数据保存的地方 */
    int capacity;               /* 栈的容量，也就是栈内最大能存储的元素数量 */
    int size;                   /* 栈中已有元素数量，就是栈当前有多少元素 */
};

typedef struct _stack DYMStack;

/* 下面是函数的声明，你需要写的代码再 stack.c 中 */


DYMStack DYMStackCreate(int capacity);                      /*创建一个容量为 capacity 的栈，并返回*/
int DYMStackPush(DYMStack *stack,DYMStackDataType elem);    /*  元素进栈，若当前栈已经满了，没办法再进栈返回0。进栈成功返回 1 */
int DYMStackPop(DYMStack *stack);                           /*  元素出栈，若当前栈已经空了，没办法再出栈返回0。出栈成功返回 1 */
int DYMStackTop(DYMStack *stack, DYMStackDataType *topElem);/*  查看栈顶元素，若当前栈已经空了，栈顶无元素返回 0。查看成功返回 1 */
void DYMStackDestory(DYMStack stack);                       /* 删除一个栈（释放申请的空间） */